package com.remedios.myFrameworkDemo;

import BeanfactoryTest.BeanC;
import com.beanFactory.MyAnnotationConfigApplicationContext;
import com.remedios.pojo.BeanA;
import com.remedios.pojo.BeanB;
import com.remedios.pojo.Book;
import com.remedios.service.BeanService;


public class TestDemo {
    public static void main(String[] args) {
/*这个主运行程序目前只能放src包下 放test会报错 估计是路径解析问题 暂时没空解决
        import第三方包导入功能未实现
        @PropertySource({"classpath:*.properties"})未实现 简单粗暴直接读取了当前模块下resources包下所有的.properties文件 只要符合就能注入
        .properties文件需设置成utf-8

        可以随意创建修改resources包下的.properties文件,并在其中设置任意key value值 与成员属性匹配即可
        类的成员属性可以根据文件夹名和其中key值来获取value值注入

        必须要有一个配置类 其必须添加了@MyConfiguration @MyComponentScan("com.remedios") 这两个注解 才能生成bean 否则报错
        @MyComponentScan("com.remedios")中的包名可以修改 非该注解指定包下的bean不会被实例化

        类必须添加MyComponent MyController MyRepository MyService注解 才可以被实例化

        类成员属性需添加MyAutoWired注解才会被自动注入属性 否则为null

        类成员属性可以添加MyValue注解来自动注入属性
        @MyValue("Rose")则直接赋值为Rose
        @MyValue("${BookInfo.bookName}")则会根据模块下的配置文件读取属性赋值

        */
        //通过接口拿实现类对象
        BeanService beanService = (BeanService) MyAnnotationConfigApplicationContext.getBean(BeanService.class);
        beanService.method();
        //获取BeanA对象 调用其方法 其成员属性为自动注入 包含一个BeanB的成员属性
        BeanA beanA = (BeanA) MyAnnotationConfigApplicationContext.getBean(BeanA.class);
        //此方法调用了BeanB中的print方法
        beanA.print();
        //获取BeanB对象
        BeanB beanB = (BeanB) MyAnnotationConfigApplicationContext.getBean(BeanB.class);
        System.out.println(beanB.getName() + " 的年龄:" +beanB.getAge());
        //BeanA 中的属性选择了两种注入方式 直接赋值和读取本地文件
        System.out.println(beanA.getName() + " 的梦想是 " + beanA.getDream());
        Book book = (Book) MyAnnotationConfigApplicationContext.getBean(Book.class);
        System.out.println(book);
        //这个类不在配置类@MyComponentScan("com.remedios")所指定的包路径下 所以并不会被创建
        BeanC beanC = (BeanC) MyAnnotationConfigApplicationContext.getBean(BeanC.class);
        //没有被创建所以是null
        System.out.println(beanC);
    }
}
